জানুন কীভাবে WebAssembly WASI-এর ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন রিসোর্স অ্যাবস্ট্রাকশনে বিপ্লব আনছে এবং বিশ্বব্যাপী বিভিন্ন কম্পিউটিং পরিবেশে সুরক্ষিত, পোর্টেবল ও দক্ষ অ্যাপ্লিকেশন তৈরি করতে সক্ষম করছে।
WebAssembly WASI ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন: সর্বজনীন রিসোর্স অ্যাবস্ট্রাকশনের উন্মোচন
ডিস্ট্রিবিউটেড কম্পিউটিং-এর দ্রুত পরিবর্তনশীল জগতে, এমন অ্যাপ্লিকেশন তৈরি করা অপরিহার্য হয়ে উঠেছে যা একই সাথে সুরক্ষিত, অত্যন্ত পোর্টেবল এবং অবিশ্বাস্যভাবে দক্ষ। বিশ্বজুড়ে ডেভেলপার এবং আর্কিটেক্টরা বিভিন্ন অপারেটিং সিস্টেম, ভিন্ন হার্ডওয়্যার আর্কিটেকচার এবং শক্তিশালী নিরাপত্তা ব্যবস্থার প্রয়োজনীয়তার মতো চ্যালেঞ্জের সাথে লড়াই করছেন। এই বৈশ্বিক চ্যালেঞ্জই WebAssembly (Wasm) এবং এর সিস্টেম ইন্টারফেস, WASI (WebAssembly System Interface)-কে একটি শক্তিশালী প্যারাডাইম শিফট হিসেবে তুলে ধরেছে।
WASI-এর উদ্ভাবনের মূলে রয়েছে একটি অত্যাধুনিক কৌশল যা ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন নামে পরিচিত। এই ধারণাটিই এর সর্বজনীন রিসোর্স অ্যাবস্ট্রাকশনের প্রতিশ্রুতিকে ভিত্তি দেয়। এই ব্লগ পোস্টে আমরা এই গুরুত্বপূর্ণ দিকটি নিয়ে আলোচনা করব এবং দেখাব কীভাবে WASI ভার্চুয়াল ফাইল ডেসক্রিপ্টর ব্যবহার করে হোস্ট-নির্দিষ্ট বিবরণগুলিকে অ্যাবস্ট্রাক্ট করে, যার ফলে WebAssembly মডিউলগুলি বাইরের বিশ্বের সাথে অত্যন্ত সুরক্ষিত, পোর্টেবল এবং দক্ষভাবে যোগাযোগ করতে পারে, তা সে যে কোনো পরিকাঠামোতেই চলুক না কেন।
চিরস্থায়ী চ্যালেঞ্জ: কোড এবং বাস্তব রিসোর্সের মধ্যে সেতুবন্ধন
WASI-এর সমাধান বিশ্লেষণ করার আগে, এটি যে মৌলিক সমস্যার সমাধান করে তা বোঝা অপরিহার্য। সফটওয়্যার অ্যাপ্লিকেশন, তাদের জটিলতা যাই হোক না কেন, অনিবার্যভাবে বাইরের রিসোর্সের সাথে যোগাযোগ করার প্রয়োজন হয়। এর মধ্যে রয়েছে ফাইল পড়া এবং লেখা, নেটওয়ার্কের মাধ্যমে ডেটা পাঠানো এবং গ্রহণ করা, বর্তমান সময় অ্যাক্সেস করা, র্যান্ডম সংখ্যা তৈরি করা বা এনভায়রনমেন্ট ভেরিয়েবল জিজ্ঞাসা করা। ঐতিহ্যগতভাবে, এই মিথস্ক্রিয়াগুলি সিস্টেম কল-এর মাধ্যমে সঞ্চালিত হয় – যা অপারেটিং সিস্টেম (OS) কার্নেল দ্বারা প্রদত্ত নির্দিষ্ট ফাংশন।
"নেটিভ" ডাইলেমা: OS-নির্দিষ্ট ইন্টারফেস এবং অন্তর্নিহিত ঝুঁকি
C বা Rust-এ লেখা একটি প্রোগ্রামের কথা ভাবুন যা একটি ফাইলে ডেটা সংরক্ষণ করার জন্য ডিজাইন করা হয়েছে। একটি লিনাক্স সিস্টেমে, এটি POSIX স্ট্যান্ডার্ড ফাংশন যেমন open(), write(), এবং close() ব্যবহার করতে পারে। একটি উইন্ডোজ সিস্টেমে, এটি Win32 APIs যেমন CreateFile(), WriteFile(), এবং CloseHandle() ব্যবহার করবে। এই স্পষ্ট ভিন্নতার মানে হল যে একটি OS-এর জন্য লেখা কোড অন্যটিতে চালানোর জন্য প্রায়শই উল্লেখযোগ্য পরিবর্তন বা সম্পূর্ণ ভিন্ন বাস্তবায়নের প্রয়োজন হয়। পোর্টেবিলিটির এই অভাব বিশ্বব্যাপী দর্শক বা বিভিন্ন ডিপ্লয়মেন্ট পরিবেশের জন্য অ্যাপ্লিকেশনগুলির জন্য যথেষ্ট ডেভেলপমেন্ট এবং রক্ষণাবেক্ষণের বোঝা তৈরি করে।
পোর্টেবিলিটির বাইরে, সিস্টেম কলে সরাসরি অ্যাক্সেস উল্লেখযোগ্য নিরাপত্তা ঝুঁকি তৈরি করে। একটি দুর্বৃত্ত বা আপোস করা অ্যাপ্লিকেশন, যদি OS-এর সম্পূর্ণ সিস্টেম কলে অবাধ অ্যাক্সেস পায়, তবে সম্ভাব্যভাবে:
- সিস্টেমের যেকোনো ফাইল অ্যাক্সেস করতে পারে: সংবেদনশীল কনফিগারেশন ফাইল পড়া বা গুরুত্বপূর্ণ সিস্টেম বাইনারিতে ক্ষতিকারক কোড লেখা।
- যেকোনো নেটওয়ার্ক সংযোগ খুলতে পারে: ডিনায়াল-অফ-সার্ভিস আক্রমণ চালানো বা ডেটা পাচার করা।
- সিস্টেম প্রসেস ম্যানিপুলেট করতে পারে: অপরিহার্য পরিষেবাগুলি বন্ধ করা বা নতুন, অননুমোদিত প্রসেস তৈরি করা।
ঐতিহ্যবাহী কন্টেনমেন্ট কৌশল, যেমন ভার্চুয়াল মেশিন (VMs) বা কন্টেইনার (যেমন Docker), একটি আইসোলেশন স্তর প্রদান করে। তবে, VMs-এর যথেষ্ট ওভারহেড থাকে, এবং কন্টেইনারগুলি, যদিও হালকা, তবুও শেয়ার করা কার্নেল রিসোর্সের উপর নির্ভর করে এবং "কন্টেইনার এস্কেপ" বা অতিরিক্ত সুবিধা সম্পন্ন অ্যাক্সেস রোধ করার জন্য সতর্ক কনফিগারেশনের প্রয়োজন হয়। তারা প্রসেস স্তরে আইসোলেশন প্রদান করে, কিন্তু Wasm এবং WASI-এর লক্ষ্য যে সূক্ষ্ম-স্তরের রিসোর্স আইসোলেশন, তা তারা প্রদান করে না।
"স্যান্ডবক্স" এর আবশ্যকতা: উপযোগিতা বিসর্জন না দিয়ে নিরাপত্তা
আধুনিক, অবিশ্বস্ত, বা মাল্টি-টেন্যান্ট পরিবেশের জন্য – যেমন সার্ভারলেস প্ল্যাটফর্ম, এজ ডিভাইস, বা ব্রাউজার এক্সটেনশন – একটি অনেক কঠোর এবং আরও গ্রানুলার ধরনের স্যান্ডবক্সিং প্রয়োজন। লক্ষ্য হল একটি কোডকে তার উদ্দেশ্যমূলক ফাংশন সম্পাদন করার অনুমতি দেওয়া, কিন্তু তাকে কোনো অপ্রয়োজনীয় ক্ষমতা বা এমন রিসোর্সে অ্যাক্সেস না দেওয়া যা তার স্পষ্টভাবে প্রয়োজন নেই। এই নীতি, যা ন্যূনতম সুবিধার নীতি (principle of least privilege) নামে পরিচিত, শক্তিশালী নিরাপত্তা ডিজাইনের জন্য মৌলিক।
WebAssembly (Wasm): ইউনিভার্সাল বাইনারি ফরম্যাট
WASI-এর উদ্ভাবনগুলি আরও গভীরে যাওয়ার আগে, আসুন সংক্ষেপে WebAssembly নিজেই পর্যালোচনা করি। Wasm হল একটি নিম্ন-স্তরের বাইটকোড ফরম্যাট যা উচ্চ-পারফরম্যান্স অ্যাপ্লিকেশনের জন্য ডিজাইন করা হয়েছে। এটি বেশ কিছু আকর্ষণীয় সুবিধা প্রদান করে:
- পোর্টেবিলিটি: Wasm বাইটকোড প্ল্যাটফর্ম-অ্যাগনস্টিক, যার মানে এটি যেকোনো সিস্টেমে চলতে পারে যেখানে একটি Wasm রানটাইম আছে, অন্তর্নিহিত সিপিইউ আর্কিটেকচার বা অপারেটিং সিস্টেম নির্বিশেষে। এটি জাভার "একবার লিখুন, যেকোনো জায়গায় চালান" এর মতো কিন্তু অনেক নিম্ন স্তরে, নেটিভ পারফরম্যান্সের কাছাকাছি।
- পারফরম্যান্স: Wasm প্রায়-নেটিভ এক্সিকিউশন গতির জন্য ডিজাইন করা হয়েছে। এটি Wasm রানটাইম দ্বারা অত্যন্ত অপ্টিমাইজড মেশিন কোডে কম্পাইল করা হয়, যা এটিকে সিপিইউ-ইনটেনসিভ কাজের জন্য আদর্শ করে তোলে।
- নিরাপত্তা: Wasm ডিফল্টভাবে একটি সুরক্ষিত, মেমরি-সেফ স্যান্ডবক্সে চলে। এটি সরাসরি হোস্ট সিস্টেমের মেমরি বা রিসোর্স অ্যাক্সেস করতে পারে না যদি না Wasm রানটাইম দ্বারা স্পষ্টভাবে অনুমতি দেওয়া হয়।
- ভাষা অ্যাগনস্টিক: ডেভেলপাররা বিভিন্ন ভাষায় (Rust, C/C++, Go, AssemblyScript, এবং আরও অনেক) লেখা কোড Wasm-এ কম্পাইল করতে পারে, যা ভাষা-নির্দিষ্ট রানটাইম নির্ভরতা ছাড়াই পলিগ্লট ডেভেলপমেন্টের অনুমতি দেয়।
- ছোট ফুটপ্রিন্ট: Wasm মডিউলগুলি সাধারণত খুব ছোট হয়, যার ফলে দ্রুত ডাউনলোড, কম মেমরি খরচ এবং দ্রুত স্টার্টআপ সময় হয়, যা এজ এবং সার্ভারলেস পরিবেশের জন্য অত্যন্ত গুরুত্বপূর্ণ।
যদিও Wasm একটি শক্তিশালী এক্সিকিউশন পরিবেশ প্রদান করে, এটি অন্তর্নিহিতভাবে বিচ্ছিন্ন। ফাইল, নেটওয়ার্ক বা অন্যান্য সিস্টেম রিসোর্সের সাথে ইন্টারঅ্যাক্ট করার জন্য এর কোনো অন্তর্নির্মিত ক্ষমতা নেই। এখানেই WASI-এর ভূমিকা।
WASI: সুনির্দিষ্টতার সাথে WebAssembly এবং হোস্ট সিস্টেমের মধ্যে সেতুবন্ধন
WASI, বা WebAssembly সিস্টেম ইন্টারফেস, হল স্ট্যান্ডার্ডাইজড API-এর একটি মডুলার সংগ্রহ যা WebAssembly মডিউলগুলিকে হোস্ট পরিবেশের সাথে নিরাপদে ইন্টারঅ্যাক্ট করতে দেয়। এটি OS-অ্যাগনস্টিক হওয়ার জন্য ডিজাইন করা হয়েছে, যা Wasm মডিউলগুলিকে ব্রাউজারের বাইরে সত্যিকারের পোর্টেবিলিটি অর্জন করতে সক্ষম করে।
সিস্টেম ইন্টারফেসের ভূমিকা: ইন্টারঅ্যাকশনের জন্য একটি চুক্তি
WASI-কে একটি স্ট্যান্ডার্ডাইজড চুক্তি হিসাবে ভাবুন। WASI স্পেসিফিকেশন অনুযায়ী লেখা একটি Wasm মডিউল ঠিক জানে যে এটি সিস্টেম রিসোর্স অনুরোধ করার জন্য কোন ফাংশনগুলি কল করতে পারে (যেমন, "একটি ফাইল খুলুন," "একটি সকেট থেকে পড়ুন")। Wasm রানটাইম, যা Wasm মডিউল হোস্ট এবং এক্সিকিউট করে, এই WASI ফাংশনগুলি বাস্তবায়নের জন্য দায়ী, বিমূর্ত অনুরোধগুলিকে হোস্ট OS-এর উপর কংক্রিট অপারেশনে অনুবাদ করে। এই অ্যাবস্ট্রাকশন স্তরটি WASI-এর শক্তির চাবিকাঠি।
WASI-এর ডিজাইন নীতি: ক্ষমতা-ভিত্তিক নিরাপত্তা এবং ডিটারমিনিজম
WASI-এর ডিজাইন ক্ষমতা-ভিত্তিক নিরাপত্তা (capability-based security) দ্বারা ব্যাপকভাবে প্রভাবিত। একটি Wasm মডিউলের নির্দিষ্ট কাজ করার জন্য একটি সাধারণ অনুমতি থাকার পরিবর্তে (যেমন, "সমস্ত ফাইল অ্যাক্সেস"), এটি শুধুমাত্র নির্দিষ্ট রিসোর্সের জন্য নির্দিষ্ট "ক্ষমতা" পায়। এর মানে হল হোস্ট স্পষ্টভাবে Wasm মডিউলকে শুধুমাত্র সেই সঠিক অনুমতিগুলি দেয় যা তার সীমিত সংখ্যক রিসোর্সের জন্য প্রয়োজন। এই নীতিটি আক্রমণের পৃষ্ঠকে নাটকীয়ভাবে হ্রাস করে।
আরেকটি গুরুত্বপূর্ণ নীতি হল ডিটারমিনিজম (determinism)। অনেক ব্যবহারের ক্ষেত্রে, বিশেষ করে ব্লকচেইন বা পুনরুৎপাদনযোগ্য বিল্ডের মতো ক্ষেত্রে, এটি অত্যাবশ্যক যে একটি Wasm মডিউল, একই ইনপুট দেওয়া হলে, সর্বদা একই আউটপুট তৈরি করে। WASI সিস্টেম কলের জন্য সুনির্দিষ্ট আচরণ প্রদান করে এটি সহজ করার জন্য ডিজাইন করা হয়েছে, যেখানে সম্ভব সেখানে নন-ডিটারমিনিজম হ্রাস করে।
ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন: রিসোর্স অ্যাবস্ট্রাকশনের গভীরে
এখন, আসুন মূল বিষয়ে আসি: WASI কীভাবে ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশনের মাধ্যমে রিসোর্স অ্যাবস্ট্রাকশন অর্জন করে। এই প্রক্রিয়াটি WASI-এর নিরাপত্তা এবং পোর্টেবিলিটির প্রতিশ্রুতির কেন্দ্রবিন্দু।
একটি ফাইল ডেসক্রিপ্টর কী? (ঐতিহ্যবাহী দৃষ্টিভঙ্গি)
ঐতিহ্যবাহী ইউনিক্স-সদৃশ অপারেটিং সিস্টেমে, একটি ফাইল ডেসক্রিপ্টর (FD) হল একটি বিমূর্ত সূচক (সাধারণত একটি অ-নেতিবাচক পূর্ণসংখ্যা) যা একটি ফাইল বা অন্যান্য ইনপুট/আউটপুট রিসোর্স, যেমন একটি পাইপ, একটি সকেট, বা একটি ডিভাইস অ্যাক্সেস করতে ব্যবহৃত হয়। যখন একটি প্রোগ্রাম একটি ফাইল খোলে, OS একটি ফাইল ডেসক্রিপ্টর ফেরত দেয়। প্রোগ্রামটি তখন সেই ফাইলের উপর পরবর্তী সমস্ত ক্রিয়াকলাপের জন্য এই FD ব্যবহার করে, যেমন পড়া, লেখা বা খোঁজা। প্রসেসগুলি বাইরের বিশ্বের সাথে কীভাবে ইন্টারঅ্যাক্ট করে তার জন্য FD গুলি মৌলিক।
Wasm-এর দৃষ্টিকোণ থেকে ঐতিহ্যবাহী FD-গুলির সমস্যা হল যে সেগুলি হোস্ট-নির্দিষ্ট। একটি OS-এ একটি FD নম্বর অন্য একটিতে সম্পূর্ণ ভিন্ন রিসোর্সের সাথে সঙ্গতিপূর্ণ হতে পারে, বা এমনকি অবৈধও হতে পারে। তদুপরি, হোস্ট FD-গুলির সরাসরি ম্যানিপুলেশন যেকোনো স্যান্ডবক্সিংকে বাইপাস করে, Wasm মডিউলকে অনিয়ন্ত্রিত অ্যাক্সেস দেয়।
WASI-এর ভার্চুয়াল ফাইল ডেসক্রিপ্টর: অ্যাবস্ট্রাকশন লেয়ার
WASI তার নিজস্ব ভার্চুয়াল ফাইল ডেসক্রিপ্টর-এর ধারণা প্রবর্তন করে। যখন একটি Wasm মডিউল, WASI দিয়ে কম্পাইল করা, একটি ফাইল বা একটি নেটওয়ার্ক সকেটের সাথে ইন্টারঅ্যাক্ট করতে চায়, তখন এটি সরাসরি হোস্ট OS-এর ফাইল ডেসক্রিপ্টরগুলির সাথে ইন্টারঅ্যাক্ট করে না। পরিবর্তে, এটি একটি WASI-সংজ্ঞায়িত API (যেমন, wasi_snapshot_preview1::fd_read) ব্যবহার করে WASI রানটাইমের কাছে একটি অনুরোধ করে।
এটি কীভাবে কাজ করে তা এখানে:
- হোস্ট প্রি-ওপেনিং: Wasm মডিউল এক্সিকিউশন শুরু করার আগেই, হোস্ট পরিবেশ (Wasm রানটাইম) মডিউলের জন্য নির্দিষ্ট ডিরেক্টরি বা রিসোর্সগুলি স্পষ্টভাবে "প্রি-ওপেন" করে। উদাহরণস্বরূপ, হোস্ট সিদ্ধান্ত নিতে পারে যে Wasm মডিউল শুধুমাত্র একটি নির্দিষ্ট ডিরেক্টরির মধ্যে ফাইল অ্যাক্সেস করতে পারে, ধরা যাক
/my-data, এবং এটিকে শুধুমাত্র পঠনযোগ্য অ্যাক্সেস প্রদান করে। - ভার্চুয়াল FD অ্যাসাইনমেন্ট: প্রতিটি প্রি-ওপেনড রিসোর্সের জন্য, হোস্ট একটি ভার্চুয়াল ফাইল ডেসক্রিপ্টর (একটি পূর্ণসংখ্যা) বরাদ্দ করে যা *শুধুমাত্র Wasm মডিউলের স্যান্ডবক্সের মধ্যে* অর্থবহ। এই ভার্চুয়াল FD গুলি সাধারণত 3 বা তার বেশি হয়, কারণ FD 0, 1, এবং 2 প্রথাগতভাবে স্ট্যান্ডার্ড ইনপুট, স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড এররের জন্য সংরক্ষিত থাকে, যা WASI দ্বারা ভার্চুয়ালাইজড করা হয়।
- ক্ষমতা প্রদান: ভার্চুয়াল FD-এর সাথে, হোস্ট সেই ভার্চুয়াল FD-এর জন্য একটি নির্দিষ্ট সেট ক্ষমতা (অনুমতি) প্রদান করে। এই ক্ষমতাগুলি সূক্ষ্ম-স্তরের এবং নির্দিষ্ট করে যে Wasm মডিউল সেই রিসোর্সের উপর ঠিক কী কী কাজ করতে পারে। উদাহরণস্বরূপ, একটি ডিরেক্টরি একটি ভার্চুয়াল FD (যেমন,
3) এবংread,write, এবংcreate_fileএর ক্ষমতা সহ প্রি-ওপেন করা হতে পারে। অন্য একটি ফাইল ভার্চুয়াল FD4এবং শুধুমাত্রreadক্ষমতা সহ প্রি-ওপেন করা হতে পারে। - Wasm মডিউল ইন্টারঅ্যাকশন: যখন Wasm মডিউল একটি ফাইল থেকে পড়তে চায়, তখন এটি
wasi_snapshot_preview1::path_openএর মতো একটি WASI ফাংশন কল করে, তার একটি প্রি-ওপেনড ডিরেক্টরির সাপেক্ষে একটি পাথ নির্দিষ্ট করে (যেমন, ভার্চুয়াল FD3এর সাপেক্ষে"data.txt")। সফল হলে, WASI রানটাইম নতুন খোলা ফাইলের জন্য *আরেকটি* ভার্চুয়াল FD ফেরত দেয়, তার নির্দিষ্ট ক্ষমতা সহ। মডিউলটি তখন এই নতুন ভার্চুয়াল FD পড়া/লেখার অপারেশনের জন্য ব্যবহার করে। - হোস্ট ম্যাপিং: হোস্টের Wasm রানটাইম এই WASI কলগুলিকে ইন্টারসেপ্ট করে। এটি ভার্চুয়াল FD অনুসন্ধান করে, প্রদত্ত ক্ষমতার বিপরীতে অনুরোধ করা ক্রিয়াটি যাচাই করে, এবং তারপর এই ভার্চুয়াল অনুরোধটিকে হোস্ট OS-এর সংশ্লিষ্ট *নেটিভ* সিস্টেম কলে অনুবাদ করে, প্রকৃত, অন্তর্নিহিত হোস্ট ফাইল ডেসক্রিপ্টর ব্যবহার করে যা প্রি-ওপেনড রিসোর্সের সাথে ম্যাপ করা হয়েছে।
এই পুরো প্রক্রিয়াটি Wasm মডিউলের কাছে স্বচ্ছভাবে ঘটে। Wasm মডিউল শুধুমাত্র তার বিমূর্ত, ভার্চুয়াল ফাইল ডেসক্রিপ্টর এবং তাদের সাথে যুক্ত ক্ষমতাগুলি দেখে এবং পরিচালনা করে। হোস্টের অন্তর্নিহিত ফাইল সিস্টেম কাঠামো, তার নেটিভ FD, বা তার নির্দিষ্ট সিস্টেম কল কনভেনশন সম্পর্কে এর কোনো জ্ঞান নেই।
উদাহরণ: একটি ডিরেক্টরি প্রি-ওপেন করা
একটি Wasm মডিউলের কথা ভাবুন যা ছবি প্রসেস করার জন্য ডিজাইন করা হয়েছে। হোস্ট পরিবেশ এটিকে এমন একটি কমান্ড দিয়ে চালু করতে পারে:
wasmtime --mapdir /in::/var/data/images --mapdir /out::/tmp/processed-images image-processor.wasm
এই পরিস্থিতিতে:
- হোস্ট Wasm রানটাইম (যেমন, Wasmtime) দুটি হোস্ট ডিরেক্টরি প্রি-ওপেন করে:
/var/data/imagesএবং/tmp/processed-images। - এটি
/var/data/imagesকে Wasm মডিউলের ভার্চুয়াল পাথ/inএ ম্যাপ করে, এবং এটিকে, ধরা যাক,readএবংlookupক্ষমতা প্রদান করে। এর মানে হল Wasm মডিউল তার ভার্চুয়াল/inডিরেক্টরির মধ্যে ফাইল তালিকাভুক্ত করতে এবং পড়তে পারে। - এটি
/tmp/processed-imagesকে Wasm মডিউলের ভার্চুয়াল পাথ/outএ ম্যাপ করে, এবং এটিকে, ধরা যাক,write,create_file, এবংremove_fileক্ষমতা প্রদান করে। এটি Wasm মডিউলকে তার ভার্চুয়াল/outডিরেক্টরিতে প্রসেস করা ছবি লিখতে দেয়। - Wasm মডিউল, যখন
/in/picture.jpgখুলতে বলা হয়, তখন সেই ফাইলের জন্য একটি ভার্চুয়াল FD পায়। এটি তখন সেই ভার্চুয়াল FD ব্যবহার করে ছবির ডেটা পড়তে পারে। যখন এটি প্রসেসিং শেষ করে এবং ফলাফল সংরক্ষণ করতে চায়, তখন এটি/out/picture-processed.pngখোলে, আরেকটি ভার্চুয়াল FD পায় এবং নতুন ফাইলটি লেখার জন্য এটি ব্যবহার করে।
Wasm মডিউল সম্পূর্ণরূপে অজ্ঞাত যে হোস্টে /in আসলে /var/data/images বা /out হল /tmp/processed-images। এটি শুধুমাত্র তার স্যান্ডবক্সড, ভার্চুয়াল ফাইল সিস্টেম সম্পর্কে জানে।
বিশ্বব্যাপী ইকোসিস্টেমের জন্য বাস্তবসম্মত প্রভাব এবং সুবিধা
WASI-এর ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশনের সৌন্দর্য নিছক প্রযুক্তিগত দক্ষতার বাইরেও প্রসারিত; এটি বিশ্বব্যাপী বৈচিত্র্যময় প্রযুক্তিগত পরিবেশে কর্মরত ডেভেলপার এবং সংস্থাগুলির জন্য গভীর সুবিধা উন্মোচন করে:
১. অতুলনীয় নিরাপত্তা: ন্যূনতম সুবিধার নীতির বাস্তবায়ন
এটি সম্ভবত সবচেয়ে উল্লেখযোগ্য সুবিধা। সুস্পষ্ট হোস্ট প্রি-ওপেনিং এবং ক্ষমতা প্রদানের মাধ্যমে, WASI কঠোরভাবে ন্যূনতম সুবিধার নীতি প্রয়োগ করে। একটি Wasm মডিউল শুধুমাত্র যা তাকে দেওয়া হয়েছে ঠিক তাই অ্যাক্সেস করতে পারে। এটি পারে না:
- তার নির্ধারিত ডিরেক্টরি থেকে বেরিয়ে যেতে:
/dataঅ্যাক্সেস করার জন্য তৈরি একটি মডিউল হঠাৎ করে/etc/passwdপড়ার চেষ্টা করতে পারে না। - অননুমোদিত অপারেশন করতে: শুধুমাত্র পঠনযোগ্য অ্যাক্সেস দেওয়া একটি মডিউল ফাইল লিখতে বা মুছতে পারে না।
- স্পষ্টভাবে মঞ্জুর করা হয়নি এমন রিসোর্স অ্যাক্সেস করতে: যদি এটি প্রি-ওপেন না করা হয়, তবে এটি অ্যাক্সেসযোগ্য নয়। এটি অনেক সাধারণ আক্রমণের পথ বন্ধ করে দেয় এবং Wasm মডিউলগুলিকে অবিশ্বস্ত উৎস থেকে চালানোও উল্লেখযোগ্যভাবে নিরাপদ করে তোলে। এই স্তরের নিরাপত্তা মাল্টি-টেন্যান্ট পরিবেশের জন্য অত্যন্ত গুরুত্বপূর্ণ, যেমন সার্ভারলেস কম্পিউটিং, যেখানে বিভিন্ন ব্যবহারকারীর কোড একই পরিকাঠামোতে চলে।
২. উন্নত পোর্টেবিলিটি: একবার লিখুন, সত্যিই যেকোনো জায়গায় চালান
যেহেতু Wasm মডিউল সম্পূর্ণরূপে বিমূর্ত, ভার্চুয়াল ফাইল ডেসক্রিপ্টর এবং WASI API-এর উপর কাজ করে, তাই এটি অন্তর্নিহিত হোস্ট অপারেটিং সিস্টেম থেকে সম্পূর্ণ decoupled হয়ে যায়। একই Wasm বাইনারি নির্বিঘ্নে চলতে পারে:
- লিনাক্স সার্ভারে (`wasmedge`, `wasmtime`, বা `lucet` রানটাইম ব্যবহার করে)।
- উইন্ডোজ মেশিনে (সামঞ্জস্যপূর্ণ রানটাইম ব্যবহার করে)।
- macOS ওয়ার্কস্টেশনে।
- এজ ডিভাইসে (যেমন Raspberry Pi বা এমনকি বিশেষ রানটাইম সহ মাইক্রোকন্ট্রোলার)।
- ক্লাউড পরিবেশে (বিভিন্ন ভার্চুয়াল মেশিন বা কন্টেইনার প্ল্যাটফর্মে)।
- কাস্টম এমবেডেড সিস্টেমে যা WASI স্পেসিফিকেশন বাস্তবায়ন করে।
হোস্ট রানটাইম WASI-এর ভার্চুয়াল FD এবং পাথ থেকে নেটিভ OS কলে অনুবাদের কাজটি পরিচালনা করে। এটি ডেভেলপমেন্টের প্রচেষ্টা নাটকীয়ভাবে হ্রাস করে, ডিপ্লয়মেন্ট পাইপলাইন সহজ করে এবং অ্যাপ্লিকেশনগুলিকে পুনরায় কম্পাইল বা পুনরায় ইঞ্জিনিয়ারিং ছাড়াই সবচেয়ে অনুকূল পরিবেশে স্থাপন করার অনুমতি দেয়।
৩. শক্তিশালী আইসোলেশন: পার্শ্বীয় চলাচল এবং হস্তক্ষেপ প্রতিরোধ
WASI-এর ভার্চুয়ালাইজেশন Wasm মডিউল এবং হোস্টের মধ্যে, এবং একই সাথে চলমান বিভিন্ন Wasm মডিউলগুলির মধ্যে শক্তিশালী আইসোলেশন সীমানা তৈরি করে। একটি মডিউলের দুর্ব্যবহার বা আপোস সহজে সিস্টেমের অন্যান্য অংশে বা অন্যান্য মডিউলে ছড়িয়ে পড়তে পারে না। এটি এমন পরিস্থিতিতে বিশেষভাবে মূল্যবান যেখানে একাধিক অবিশ্বস্ত প্লাগইন বা সার্ভারলেস ফাংশন একটি একক হোস্ট শেয়ার করে।
৪. সরলীকৃত ডিপ্লয়মেন্ট এবং কনফিগারেশন
বিশ্বব্যাপী অপারেশন দলগুলির জন্য, WASI ডিপ্লয়মেন্টকে সহজ করে। প্রতিটি অ্যাপ্লিকেশনের জন্য নির্দিষ্ট ভলিউম মাউন্ট এবং নিরাপত্তা কনটেক্সট সহ জটিল কন্টেইনার অর্কেস্ট্রেশন কনফিগার করার পরিবর্তে, তারা কেবল Wasm রানটাইম আহ্বানের সময় সুস্পষ্ট রিসোর্স ম্যাপিং এবং ক্ষমতা নির্ধারণ করতে পারে। এটি আরও অনুমানযোগ্য এবং অডিটযোগ্য ডিপ্লয়মেন্টের দিকে পরিচালিত করে।
৫. বর্ধিত কম্পোজিবিলিটি: সুরক্ষিত, স্বাধীন ব্লক থেকে নির্মাণ
WASI দ্বারা প্রদত্ত স্পষ্ট ইন্টারফেস এবং শক্তিশালী আইসোলেশন ডেভেলপারদের ছোট, স্বাধীন Wasm মডিউল রচনা করে জটিল অ্যাপ্লিকেশন তৈরি করতে দেয়। প্রতিটি মডিউল বিচ্ছিন্নভাবে বিকশিত এবং সুরক্ষিত করা যেতে পারে, তারপর একীভূত করা যেতে পারে এই জেনে যে তার রিসোর্স অ্যাক্সেস কঠোরভাবে নিয়ন্ত্রিত। এটি মডুলার আর্কিটেকচার, পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতাকে উৎসাহিত করে।
প্র্যাকটিসে রিসোর্স অ্যাবস্ট্রাকশন: ফাইলের বাইরে
যদিও "ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন" শব্দটি শুধুমাত্র ফাইলের উপর ফোকাস করার ইঙ্গিত দিতে পারে, WASI-এর রিসোর্স অ্যাবস্ট্রাকশন অন্যান্য অনেক মৌলিক সিস্টেম রিসোর্সে প্রসারিত:
১. নেটওয়ার্ক সকেট
ফাইলের মতোই, WASI নেটওয়ার্ক সকেট অপারেশনগুলিও ভার্চুয়ালাইজ করে। একটি Wasm মডিউল ইচ্ছামত যেকোনো নেটওয়ার্ক সংযোগ খুলতে পারে না। পরিবর্তে, হোস্ট রানটাইমকে স্পষ্টভাবে অনুমতি দিতে হবে:
- নির্দিষ্ট স্থানীয় ঠিকানা এবং পোর্টে বাইন্ড করতে: যেমন, শুধুমাত্র পোর্ট 8080।
- নির্দিষ্ট দূরবর্তী ঠিকানা এবং পোর্টে সংযোগ করতে: যেমন, শুধুমাত্র
api.example.com:443-এ।
Wasm মডিউল একটি সকেটের জন্য অনুরোধ করে (একটি ভার্চুয়াল FD গ্রহণ করে), এবং হোস্ট রানটাইম প্রকৃত TCP/UDP সংযোগ পরিচালনা করে। এটি একটি দুর্বৃত্ত মডিউলকে অভ্যন্তরীণ নেটওয়ার্ক স্ক্যান করা বা বাহ্যিক আক্রমণ চালানো থেকে বিরত রাখে।
২. ঘড়ি এবং টাইমার
বর্তমান সময় অ্যাক্সেস করা বা টাইমার সেট করা আরেকটি ইন্টারঅ্যাকশন যা WASI অ্যাবস্ট্রাক্ট করে। হোস্ট Wasm মডিউলকে একটি ভার্চুয়াল ঘড়ি প্রদান করে, যা হোস্টের হার্ডওয়্যার ঘড়ির সাথে সরাসরি ইন্টারঅ্যাক্ট না করেই সময় জিজ্ঞাসা করতে বা একটি টাইমার সেট করতে পারে। এটি ডিটারমিনিজম এবং মডিউলগুলিকে সিস্টেমের সময় ম্যানিপুলেট করা থেকে বিরত রাখার জন্য গুরুত্বপূর্ণ।
৩. এনভায়রনমেন্ট ভেরিয়েবল
এনভায়রনমেন্ট ভেরিয়েবলগুলিতে প্রায়শই সংবেদনশীল কনফিগারেশন ডেটা থাকে (যেমন, ডাটাবেস শংসাপত্র, API কী)। WASI হোস্টকে সমস্ত হোস্ট এনভায়রনমেন্ট ভেরিয়েবল উন্মোচন করার পরিবর্তে, Wasm মডিউলে *শুধুমাত্র* প্রয়োজনীয় এনভায়রনমেন্ট ভেরিয়েবলগুলি স্পষ্টভাবে সরবরাহ করার অনুমতি দেয়। এটি তথ্য ফাঁস প্রতিরোধ করে।
৪. র্যান্ডম নম্বর জেনারেশন
ক্রিপ্টোগ্রাফিক্যালি সুরক্ষিত র্যান্ডম নম্বর জেনারেশন অনেক অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ। WASI Wasm মডিউলগুলিকে র্যান্ডম বাইট অনুরোধ করার জন্য একটি API সরবরাহ করে। হোস্ট রানটাইম উচ্চ-মানের, সুরক্ষিতভাবে জেনারেট করা র্যান্ডম নম্বর সরবরাহ করার জন্য দায়ী, হোস্টের র্যান্ডম নম্বর জেনারেটরের নির্দিষ্ট বিবরণগুলি (যেমন, লিনাক্সে /dev/urandom বা উইন্ডোজে `BCryptGenRandom`) অ্যাবস্ট্রাক্ট করে।
বিশ্বব্যাপী প্রভাব এবং রূপান্তরকারী ব্যবহারের ক্ষেত্র
WebAssembly-এর পারফরম্যান্স এবং পোর্টেবিলিটির সাথে WASI-এর সুরক্ষিত রিসোর্স অ্যাবস্ট্রাকশনের সমন্বয় বিশ্বব্যাপী বিভিন্ন শিল্পে উদ্ভাবন চালনা করতে প্রস্তুত:
১. এজ কম্পিউটিং এবং IoT: সীমাবদ্ধ ডিভাইসে সুরক্ষিত কোড
এজ ডিভাইসগুলির প্রায়শই সীমিত রিসোর্স থাকে (সিপিইউ, মেমরি, স্টোরেজ) এবং সম্ভাব্য অনিরাপদ বা অবিশ্বস্ত পরিবেশে কাজ করে। Wasm-এর ছোট ফুটপ্রিন্ট এবং WASI-এর শক্তিশালী নিরাপত্তা মডেল এটিকে এজ ডিভাইসে অ্যাপ্লিকেশন লজিক স্থাপন করার জন্য আদর্শ করে তোলে। একটি নিরাপত্তা ক্যামেরার কথা ভাবুন যা AI অনুমানের জন্য একটি Wasm মডিউল চালাচ্ছে, শুধুমাত্র ক্যামেরার ফিড থেকে পড়ার এবং একটি নির্দিষ্ট নেটওয়ার্ক এন্ডপয়েন্টে প্রসেস করা ডেটা লেখার অনুমতি রয়েছে, অন্য কোনো সিস্টেম অ্যাক্সেস ছাড়াই। এটি নিশ্চিত করে যে AI মডিউলটি আপোস করা হলেও, ডিভাইসটি নিজেই সুরক্ষিত থাকে।
২. সার্ভারলেস ফাংশন: পরবর্তী প্রজন্মের মাল্টি-টেন্যান্সি
সার্ভারলেস প্ল্যাটফর্মগুলি অন্তর্নিহিতভাবে মাল্টি-টেন্যান্ট, শেয়ার করা পরিকাঠামোতে বিভিন্ন ব্যবহারকারীর কোড চালায়। WASI এই ব্যবহারের ক্ষেত্রে ঐতিহ্যবাহী কন্টেইনারগুলির তুলনায় একটি উন্নত স্যান্ডবক্সিং প্রক্রিয়া সরবরাহ করে। এর দ্রুত স্টার্টআপ সময় (ছোট আকার এবং দক্ষ এক্সিকিউশনের কারণে) এবং সূক্ষ্ম-স্তরের নিরাপত্তা নিশ্চিত করে যে একটি ফাংশনের কোড অন্যটির সাথে বা অন্তর্নিহিত হোস্টের সাথে হস্তক্ষেপ করতে পারে না, যা সার্ভারলেস ডিপ্লয়মেন্টকে ক্লাউড প্রদানকারী এবং বিশ্বব্যাপী ডেভেলপারদের জন্য আরও সুরক্ষিত এবং দক্ষ করে তোলে।
৩. মাইক্রোসার্ভিস এবং পলিগ্লট আর্কিটেকচার: ভাষা-অ্যাগনস্টিক উপাদান
সংস্থাগুলি ক্রমবর্ধমানভাবে মাইক্রোসার্ভিস গ্রহণ করছে, যা প্রায়শই বিভিন্ন প্রোগ্রামিং ভাষায় লেখা হয়। Wasm, কার্যত যেকোনো ভাষা থেকে কম্পাইল করা, এই পরিষেবাগুলির জন্য সার্বজনীন রানটাইম হয়ে উঠতে পারে। WASI-এর অ্যাবস্ট্রাকশন নিশ্চিত করে যে একটি Rust-এ লেখা Wasm পরিষেবা একটি Go-তে লেখা পরিষেবার মতোই সহজে এবং নিরাপদে ফাইল বা ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে পারে, এবং এগুলি সবই সম্পূর্ণ পরিকাঠামো জুড়ে পোর্টেবল, যা বিশ্বব্যাপী পলিগ্লট মাইক্রোসার্ভিস ডেভেলপমেন্ট এবং ডিপ্লয়মেন্টকে সহজ করে।
৪. ব্লকচেইন এবং স্মার্ট চুক্তি: ডিটারমিনিস্টিক এবং বিশ্বাসযোগ্য এক্সিকিউশন
ব্লকচেইন পরিবেশে, স্মার্ট চুক্তিগুলিকে অসংখ্য বিতরণ করা নোড জুড়ে ডিটারমিনিস্টিক এবং সুরক্ষিতভাবে এক্সিকিউট করতে হবে। Wasm-এর ডিটারমিনিস্টিক প্রকৃতি এবং WASI-এর নিয়ন্ত্রিত পরিবেশ এটিকে স্মার্ট চুক্তি এক্সিকিউশন ইঞ্জিনের জন্য একটি চমৎকার প্রার্থী করে তোলে। ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন নিশ্চিত করে যে চুক্তি এক্সিকিউশন বিচ্ছিন্ন এবং নোডের অন্তর্নিহিত ফাইল সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে পারে না, যা সততা এবং পূর্বাভাসযোগ্যতা বজায় রাখে।
৫. সুরক্ষিত প্লাগইন এবং এক্সটেনশন সিস্টেম: অ্যাপ্লিকেশনের ক্ষমতা নিরাপদে প্রসারিত করা
ওয়েব ব্রাউজার থেকে শুরু করে কন্টেন্ট ম্যানেজমেন্ট সিস্টেম পর্যন্ত অনেক অ্যাপ্লিকেশন প্লাগইন আর্কিটেকচার সরবরাহ করে। তৃতীয় পক্ষের কোড একীভূত করা সবসময় নিরাপত্তা ঝুঁকি বহন করে। প্লাগইনগুলিকে WASI-সক্ষম Wasm মডিউল হিসাবে চালানোর মাধ্যমে, অ্যাপ্লিকেশন ডেভেলপাররা প্রতিটি প্লাগইন কোন রিসোর্সগুলি অ্যাক্সেস করতে পারে তা সঠিকভাবে নিয়ন্ত্রণ করতে পারে। একটি ফটো এডিটিং প্লাগইন, উদাহরণস্বরূপ, শুধুমাত্র তাকে দেওয়া ছবির ফাইলটি পড়ার এবং পরিবর্তিত সংস্করণটি লেখার অনুমতি পেতে পারে, নেটওয়ার্ক অ্যাক্সেস বা বিস্তৃত ফাইল সিস্টেম অনুমতি ছাড়াই।
সার্বজনীন অ্যাবস্ট্রাকশনের জন্য চ্যালেঞ্জ এবং ভবিষ্যতের দিকনির্দেশনা
যদিও WASI-এর ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন এবং রিসোর্স অ্যাবস্ট্রাকশন বিশাল সুবিধা প্রদান করে, ইকোসিস্টেমটি এখনও বিকশিত হচ্ছে:
১. বিকশিত স্ট্যান্ডার্ড: অ্যাসিঙ্ক্রোনাস I/O এবং কম্পোনেন্ট মডেল
প্রাথমিক WASI স্পেসিফিকেশন, wasi_snapshot_preview1, প্রাথমিকভাবে সিঙ্ক্রোনাস I/O সমর্থন করে, যা নেটওয়ার্ক-ভারী অ্যাপ্লিকেশনগুলির জন্য একটি পারফরম্যান্স প্রতিবন্ধকতা হতে পারে। অ্যাসিঙ্ক্রোনাস I/O এবং Wasm-এর জন্য একটি আরও শক্তিশালী কম্পোনেন্ট মডেলকে স্ট্যান্ডার্ডাইজ করার প্রচেষ্টা চলছে। কম্পোনেন্ট মডেলের লক্ষ্য হল Wasm মডিউলগুলিকে সত্যিকারের কম্পোজেবল এবং ইন্টারঅপারেবল করে তোলা, যা তাদের একে অপরের অভ্যন্তরীণ বিবরণ না জেনেই নিরাপদে এবং দক্ষতার সাথে যোগাযোগ করতে দেয়। এটি রিসোর্স শেয়ারিং এবং অ্যাবস্ট্রাকশন ক্ষমতা আরও বাড়িয়ে তুলবে।
২. গভীর ভার্চুয়ালাইজেশনের জন্য পারফরম্যান্স বিবেচনা
যদিও Wasm নিজেই দ্রুত, WASI কল এবং নেটিভ সিস্টেম কলের মধ্যে অনুবাদ স্তরটি কিছু ওভারহেড প্রবর্তন করে। অত্যন্ত উচ্চ-পারফরম্যান্স, I/O-বাউন্ড অ্যাপ্লিকেশনগুলির জন্য, এই ওভারহেড একটি বিবেচ্য বিষয় হতে পারে। যাইহোক, Wasm রানটাইমগুলিতে চলমান অপ্টিমাইজেশন এবং আরও দক্ষ WASI বাস্তবায়ন ক্রমাগত এই ব্যবধানটি হ্রাস করছে, যা Wasm + WASI-কে চাহিদাপূর্ণ পরিস্থিতিতেও প্রতিযোগিতামূলক করে তুলছে।
৩. টুলিং এবং ইকোসিস্টেমের পরিপক্কতা
Wasm এবং WASI ইকোসিস্টেম প্রাণবন্ত কিন্তু এখনও পরিপক্ক হচ্ছে। আরও ভালো ডিবাগার, প্রোফাইলার, IDE ইন্টিগ্রেশন এবং বিভিন্ন ভাষা জুড়ে স্ট্যান্ডার্ডাইজড লাইব্রেরিগুলি গ্রহণকে ত্বরান্বিত করবে। যত বেশি কোম্পানি এবং ওপেন-সোর্স প্রকল্প WASI-তে বিনিয়োগ করবে, টুলিং বিশ্বজুড়ে ডেভেলপারদের জন্য আরও শক্তিশালী এবং ব্যবহারকারী-বান্ধব হয়ে উঠবে।
উপসংহার: ক্লাউড-নেটিভ এবং এজ অ্যাপ্লিকেশনগুলির পরবর্তী প্রজন্মকে ক্ষমতায়ন
WebAssembly WASI-এর ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন কেবল একটি প্রযুক্তিগত বিবরণ নয়; এটি আধুনিক সফটওয়্যার ডেভেলপমেন্টে আমরা কীভাবে নিরাপত্তা, পোর্টেবিলিটি এবং রিসোর্স ম্যানেজমেন্টের দিকে এগোই তার একটি মৌলিক পরিবর্তনের প্রতিনিধিত্ব করে। একটি সার্বজনীন, ক্ষমতা-ভিত্তিক সিস্টেম ইন্টারফেস প্রদান করে যা হোস্ট-নির্দিষ্ট ইন্টারঅ্যাকশনের জটিলতা এবং ঝুঁকিগুলিকে অ্যাবস্ট্রাক্ট করে, WASI ডেভেলপারদের এমন অ্যাপ্লিকেশন তৈরি করতে ক্ষমতায়ন করে যা অন্তর্নিহিতভাবে আরও সুরক্ষিত, ক্ষুদ্র এজ ডিভাইস থেকে বিশাল ক্লাউড ডেটা সেন্টার পর্যন্ত যেকোনো পরিবেশে স্থাপনযোগ্য এবং সবচেয়ে চাহিদাপূর্ণ কাজের জন্যও যথেষ্ট দক্ষ।
বিভিন্ন কম্পিউটিং প্ল্যাটফর্মের জটিলতার সাথে লড়াই করা বিশ্বব্যাপী দর্শকদের জন্য, WASI একটি আকর্ষণীয় দৃষ্টিভঙ্গি সরবরাহ করে: একটি ভবিষ্যৎ যেখানে কোড সত্যিই যেকোনো জায়গায়, সুরক্ষিতভাবে এবং পূর্বাভাসযোগ্যভাবে চলে। যেহেতু WASI স্পেসিফিকেশন বিকশিত হতে থাকবে এবং এর ইকোসিস্টেম পরিপক্ক হবে, আমরা ক্লাউড-নেটিভ, এজ এবং এমবেডেড অ্যাপ্লিকেশনগুলির একটি নতুন প্রজন্মের প্রত্যাশা করতে পারি যা এই শক্তিশালী অ্যাবস্ট্রাকশনকে আরও স্থিতিস্থাপক, উদ্ভাবনী এবং সর্বজনীনভাবে অ্যাক্সেসযোগ্য সফটওয়্যার সমাধান তৈরি করতে ব্যবহার করবে।
WebAssembly এবং WASI-এর রিসোর্স অ্যাবস্ট্রাকশনের যুগান্তকারী পদ্ধতির সাথে সুরক্ষিত, পোর্টেবল কম্পিউটিং-এর ভবিষ্যৎকে আলিঙ্গন করুন। সত্যিকারের সার্বজনীন অ্যাপ্লিকেশন ডিপ্লয়মেন্টের দিকে যাত্রা ভালোভাবে শুরু হয়েছে, এবং ফাইল ডেসক্রিপ্টর ভার্চুয়ালাইজেশন এই রূপান্তরকারী আন্দোলনের একটি ভিত্তিপ্রস্তর।